import plugin from '../../lib/plugins/plugin.js';
import _ from "lodash";

// 存储用户固定名称的映射
const userFixedName = new Map();
// 存储定时器ID，用于取消定时任务
const nameTimerMap = new Map();

//需要机器人为管理或者群主才可以使用!
//每5分钟机器人自动改一次群员名字
//目的是为了防止他人管理员乱改名
//机器人若重启就要重新发送固定指令才可以继续固定名字
//自定义改名频率请跳转至第73列

export class fixedGroupName extends plugin {
    constructor() {
        super({
            name: "固定群名片",
            dsc: "将群名片固定为指定名字防止他人改名",
            event: "message.group",
            priority: -100,
            rule: [
                {
                    reg: '^#固定群名字.*(违禁词1|违禁词2|违禁词3|以此类推下去).*',
                    fnc: 'NameBan'
                },
                {
                    reg: '^#固定群名字\\s+(.+)$',
                    fnc: 'setFixedName'
                },
                {
                    reg: '^#取消固定群名字$',
                    fnc: 'cancelFixedName'
                }
            ]
        });
    }

    async setFixedName(e) {
        // 提取用户输入的名字
        const name = e.msg.match(/^#固定群名字\s+(.+)$/)[1].trim();
        if (!name) {
            return e.reply("❎ 请输入要设置的名字，例如：#固定群名字 新昵称", true);
        }

        // 检查是否已有定时任务，有的话先取消
        const timerId = nameTimerMap.get(e.user_id);
        if (timerId) {
            clearInterval(timerId);
        }

        // 存储用户固定名称
        userFixedName.set(e.user_id, name);

        // 立即设置名字
        try {
            const res = await e.group.setCard(e.user_id, name);
            if (!res) {
                return e.reply("❎ 设置名字失败，请检查权限", true);
            }
        } catch (err) {
            logger.error("设置群成员名字失败：", err);
            return e.reply("❎ 设置名字失败，请稍后重试", true);
        }

        // 设置定时任务，每5分钟更新一次名字
        const newTimerId = setInterval(async () => {
            try {
                await e.group.setCard(e.user_id, name);
            } catch (err) {
                logger.error("定时更新名字失败：", err);
            }
        }, 5 * 60 * 1000); // 5分钟改一次,可自定义频率

        // 存储定时器ID（修改变量名避免重复声明）
        nameTimerMap.set(e.user_id, newTimerId);

        e.reply(`✅ 已设置固定群名字，每5分钟自动更新一次！发送：#取消固定群名字，即可取消固定！为了防止任务过多，机器人若重启你就要重新发送固定指令才可以继续固定名字`, true);
        return true;
    }

    async cancelFixedName(e) {
        // 检查是否有固定名称
        if (!userFixedName.has(e.user_id)) {
            return e.reply("❎ 你当前没有设置固定群名字", true);
        }

        // 取消定时任务（修改变量名避免重复声明）
        const storedTimerId = nameTimerMap.get(e.user_id);
        if (storedTimerId) {
            clearInterval(storedTimerId);
            nameTimerMap.delete(e.user_id);
        }

        // 清除存储的固定名称
        userFixedName.delete(e.user_id);

        // 恢复默认名字（如果需要）
        try {
            await e.group.setCard(e.user_id, "");
        } catch (err) {
            logger.error("恢复默认名字失败：", err);
            e.reply("❎ 取消固定名字成功，但恢复默认名字失败", true);
            return true;
        }

        e.reply("✅ 已取消固定群名字设置", true);
        return true;
    }

  async NameBan(e) {
	 let arr = ['❎ 换一个名字来固定吧',
	];
        let RandomJd = arr[Math.floor(Math.random() * arr.length)];
        let msg = [
            RandomJd
        ];
        //发送消息
        e.reply(msg);
    return true; //返回true 阻挡消息不再往下
}
}
